import { BF } from "./algo/BF";
import { FF } from "./algo/FF";
import { FFD } from "./algo/FFD";
import { NF } from "./algo/NF";


console.log = (o: string) => {
  document.writeln(o + "</br>");
};

const App = () => {
  const orderNums = [15, 50, 100, 250],
    areaList = [10, 15, 13, 12],
    pact = 17,
    targetArea = 690 * 620;

  console.log("拼版数量：" + orderNums);
  console.log("拼版面积：" + areaList);
  console.log("面积最大公约数：" + pact);
  console.log("单次拼版最大面积：" + targetArea);

  const copyNum = orderNums.map((order, index) => {
    return Math.ceil(order / pact) * areaList[index];
  });


  console.log('将上诉问题转化为一维装箱问题:(考虑将n个物品中的一部分装入具有容积m的箱子中，找出一个物品组合，使得使用的箱子数量最少.)')
  console.log("个物品：" + copyNum);
  console.log("单个箱子的最大容积：" +targetArea);

  const result: number[][] = (()=>{
    //最佳适应（Best Fit, BF）
    return BF(copyNum,targetArea);
    //首次适应（First Fit, FF）
    return FF(copyNum,targetArea);
    //首次适应递减（First Fit Decreasing, FFD）
    return FFD(copyNum,targetArea);
    //循环首次适应算法(NF)
    return NF(copyNum,targetArea);
  })()


  result.forEach((v, i) => {
    console.log(i + ": " + v+'->面积：'+(()=>{
      let a:number = 0
      v.forEach(vv=>{a+=vv})
      return a
    })());
  });
};

export default App;
